%     FASTENER DOCTOR - программа для лечения и конвертации крепежа
%     Copyright (C) 2018  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function Check_Counters()

global db_Next_Node_Number;
global db_Next_MPC_Number;
global db_Next_Element_Number;
global db_Next_Field_Number;
global db_Next_Coord_Number;
global db_Next_PSet_Number;
global db_Next_FD_PSet_Number;

global DB_NODES;
global DB_MPC;
global DB_ELEMENTS;
global DB_FIELDS;
global DB_COORD;
global DB_PSETS;

global ErrCode;

fprintf (1, '    Проверка счетчиков...               ');

% Проверка счетчика номера следующего узла

if (~isempty(DB_NODES))
    
    Max_Node_Number = 0;

    for i=1:size(DB_NODES,1)

        if (DB_NODES{i}.ID > Max_Node_Number)
            Max_Node_Number = DB_NODES{i}.ID;
        end

    end

    if (db_Next_Node_Number <= Max_Node_Number)
        fprintf(1, '\nСледующий номер узла в базе Patran [%i] должен быть больше максимального номера узла в bdf файле [%i] !\n', db_Next_Node_Number, Max_Node_Number);
        fprintf(1, 'Измените параметр Next_Node_Number в настройках программы.\n');
        ErrCode = -1;
        return;
    end

end

% Проверка счетчика номера следующего MPC

if (~isempty(DB_MPC))
    
    Max_MPC_Number = 0;

    for i=1:size(DB_MPC,1)

        if (DB_MPC{i}.ID > Max_MPC_Number)
            Max_MPC_Number = DB_MPC{i}.ID;
        end

    end

    if (db_Next_MPC_Number <= Max_MPC_Number)
        fprintf(1, '\nСледующий номер MPC в базе Patran [%i] должен быть больше максимального номера MPC в bdf файле [%i] !\n', db_Next_MPC_Number, Max_MPC_Number);
        fprintf(1, 'Измените параметр Next_MPC_Number в настройках программы.\n');
        ErrCode = -1;
        return;
    end

end

% Проверка счетчика номера следующего элемента

if (~isempty(DB_ELEMENTS))
    
    Max_Elm_Number = 0;

    for i=1:size(DB_ELEMENTS,1)

        if (DB_ELEMENTS{i}.ID > Max_Elm_Number)
            Max_Elm_Number = DB_ELEMENTS{i}.ID;
        end

    end

    if (db_Next_Element_Number <= Max_Elm_Number)
        fprintf(1, '\nСледующий номер элемента в базе Patran [%i] должен быть больше максимального номера элемента в bdf файле [%i] !\n', db_Next_Element_Number, Max_Elm_Number);
        fprintf(1, 'Измените параметр Next_Element_Number в настройках программы.\n');
        ErrCode = -1;
        return;
    end

end

% Проверка счетчика номера следующего поля

if (~isempty(DB_FIELDS))
    
    Max_Field_Number = 0;

    for i=1:size(DB_FIELDS,1)

        if (DB_FIELDS{i}.ID > Max_Field_Number)
            Max_Field_Number = DB_FIELDS{i}.ID;
        end

    end

    if (db_Next_Field_Number <= Max_Field_Number)
        fprintf(1, '\nСледующий номер поля в базе программы [%i] должен быть больше максимального номера уже существующего поля, созданного по результатам чтения модели [%i] !\n', db_Next_Field_Number, Max_Field_Number);
        fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
        ErrCode = -1;
        return;
    end

end

% Проверка счетчика номера следующей системы координат

if (~isempty(DB_COORD))
    
    Max_Coord_Number = 0;

    for i=1:size(DB_COORD,1)

        if (DB_COORD{i}.ID > Max_Coord_Number)
            Max_Coord_Number = DB_COORD{i}.ID;
        end

    end

    if (db_Next_Coord_Number <= Max_Coord_Number)
        fprintf(1, '\nСледующий номер системы координат в базе Patran [%i] должен быть больше максимального номера системы координат в bdf файле [%i] !\n', db_Next_Coord_Number, Max_Coord_Number);
        fprintf(1, 'Измените параметр Next_Coord_Number в настройках программы.\n');
        ErrCode = -1;
        return;
    end

end

% Проверка счетчика номера следующего property set

if (~isempty(DB_PSETS))
    
    Max_PSet_Number = 0;

    for i=1:size(DB_PSETS,1)

        if (DB_PSETS{i}.ID > Max_PSet_Number)
            Max_PSet_Number = DB_PSETS{i}.ID;
        end

    end

    if (db_Next_PSet_Number <= Max_PSet_Number)
        fprintf(1, '\nСледующий номер property set в базе программы [%i] должен быть больше максимального номера property set в bdf файле [%i] !\n', db_Next_PSet_Number, Max_PSet_Number);
        fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
        ErrCode = -1;
        return;
    end

end

% Проверка счетчика номера следующего property set c префиксом FD

if (~isempty(DB_PSETS))
    
    Max_FD_PSet_Number = 0;
    
    for i=1:size(DB_PSETS,1)
        
        [Flag, Number] = DB_PSet_Is_FD(DB_PSETS{i}.ID);
        
        if (Flag == 1)
            if (Number > Max_FD_PSet_Number)
                Max_FD_PSet_Number = Number;
            end
        end

    end
    
    if (db_Next_FD_PSet_Number <= Max_FD_PSet_Number)
        fprintf(1, '\nСледующий номер property set c префиксом FD в базе Patran [%i] должен быть больше максимального номера property set c префиксом FD в bdf файле [%i] !\n', db_Next_FD_PSet_Number, Max_FD_PSet_Number);
        fprintf(1, 'Измените параметр Next_FD_PSet_Number в настройках программы.\n');
        ErrCode = -1;
        return;
    end
    
end

fprintf (1, 'OK!\n');
